home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1994 / 08_94_5.dms / 08_94_5.adf / term-4.0-Source.lha / TranslationPanel.c < prev    next >
C/C++ Source or Header  |  1994-07-10  |  16KB  |  719 lines

  1. /*
  2. **    TranslationPanel.c
  3. **
  4. **    Character code translation editing panel
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_PAGE=1,GAD_USE,GAD_DEFAULT,GAD_LOAD,GAD_SAVE,GAD_CANCEL,
  13.         GAD_CHAR=700
  14.     };
  15.  
  16.     /* The character table. */
  17.  
  18. STATIC STRPTR CharCodes[256] =
  19. {
  20.     "NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS" ,"HT" ,"LF" ,"VT" ,"FF" ,"CR" ,"SO" ,"SI" ,
  21.     "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM" ,"SUB","ESC","FS" ,"GS" ,"RS" ,"US" ,
  22.     "SP" , "!" , "\"", "#" , "$" , "%" , "&" , "'" , "(" , ")" , "*" , "+" , "," , "-" , "." , "/" ,
  23.      "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , ":" , ";" , "<" , "=" , ">" , "?" ,
  24.      "@" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" ,
  25.      "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "[" , "\\", "]" , "^" , "_" ,
  26.      "`" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" ,
  27.      "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" , "{" , "|" , "}" , "~" ,"DEL",
  28.     "128","129","130","131","132","133","134","135","136","137","138","139","140","141","SS2","SS3",
  29.     "DCS","145","146","147","148","149","150","151","152","153","154","CSI","ST" ,"OSC","PM" ,"APC",
  30.     "NBS", "¡" , "¢" , "£" , "¤" , "¥" , "¦" , "§" , "¨" , "©" , "ª" , "«" , "¬" ,"SHY", "®" , "¯" ,
  31.      "°" , "±" , "²" , "³" , "´" , "µ" , "¶" , "·" , "¸" , "¹" , "º" , "»" , "¼" , "½" , "¾" , "¿" ,
  32.      "À" , "Á" , "Â" , "Ã" , "Ä" , "Å" , "Æ" , "Ç" , "È" , "É" , "Ê" , "Ë" , "Ì" , "Í" , "Î" , "Ï" ,
  33.      "Ð" , "Ñ" , "Ò" , "Ó" , "Ô" , "Õ" , "Ö" , "×" , "Ø" , "Ù" , "Ú" , "Û" , "Ü" , "Ý" , "Þ" , "ß" ,
  34.      "à" , "á" , "â" , "ã" , "ä" , "å" , "æ" , "ç" , "è" , "é" , "ê" , "ë" , "ì" , "í" , "î" , "ï" ,
  35.      "ð" , "ñ" , "ò" , "ó" , "ô" , "õ" , "ö" , "÷" , "ø" , "ù" , "ú" , "û" , "ü" , "ý" , "þ" , "ÿ"
  36. };
  37.  
  38. STATIC BYTE __regargs
  39. CodePanel(struct Window *Window,UBYTE CharCode)
  40. {
  41.     struct LayoutHandle    *Handle;
  42.     BYTE             Result = FALSE;
  43.  
  44.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  45.         LH_LocaleHook,    &LocaleHook,
  46.     TAG_DONE))
  47.     {
  48.         struct Window    *Window;
  49.         UBYTE         SendBuffer[256],
  50.                  ReceiveBuffer[256];
  51.  
  52.         if(SendTable[CharCode])
  53.             TranslateBack(SendTable[CharCode] -> String,SendTable[CharCode] -> Len,SendBuffer);
  54.         else
  55.             SendBuffer[0] = 0;
  56.  
  57.         if(ReceiveTable[CharCode])
  58.             TranslateBack(ReceiveTable[CharCode] -> String,ReceiveTable[CharCode] -> Len,ReceiveBuffer);
  59.         else
  60.             ReceiveBuffer[0] = 0;
  61.  
  62.         LT_New(Handle,
  63.             LA_Type,    VERTICAL_KIND,
  64.         TAG_DONE);
  65.         {
  66.             if(CharCodes[CharCode][0] == '1' && CharCodes[CharCode][1])
  67.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1772),CharCodes[CharCode]);
  68.             else
  69.                 SPrintf(SharedBuffer,LocaleString(MSG_V36_1773),CharCode,CharCodes[CharCode]);
  70.  
  71.             LT_New(Handle,
  72.                 LA_Type,    VERTICAL_KIND,
  73.                 LA_LabelText,    SharedBuffer,
  74.             TAG_DONE);
  75.             {
  76.                 LT_New(Handle,
  77.                     LA_Type,        STRING_KIND,
  78.                     LA_LabelID,        MSG_TRANSLATIONPANEL_SEND_CODE_AS_GAD,
  79.                     LA_STRPTR,        SendBuffer,
  80.                     LA_Chars,        30,
  81.                     STRINGA_Justification,    GACT_STRINGCENTER,
  82.                     GTST_MaxChars,        255,
  83.                 TAG_DONE);
  84.  
  85.                 LT_New(Handle,
  86.                     LA_Type,        STRING_KIND,
  87.                     LA_LabelID,        MSG_TRANSLATIONPANEL_RECEIVE_CODE_AS_GAD,
  88.                     LA_STRPTR,        ReceiveBuffer,
  89.                     STRINGA_Justification,    GACT_STRINGCENTER,
  90.                     GTST_MaxChars,        255,
  91.                 TAG_DONE);
  92.  
  93.                 LT_EndGroup(Handle);
  94.             }
  95.  
  96.             LT_New(Handle,
  97.                 LA_Type,VERTICAL_KIND,
  98.             TAG_DONE);
  99.             {
  100.                 LT_New(Handle,
  101.                     LA_Type,    XBAR_KIND,
  102.                     LAXB_FullSize,    TRUE,
  103.                 TAG_DONE);
  104.  
  105.                 LT_EndGroup(Handle);
  106.             }
  107.  
  108.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  109.                 LAGR_SameSize,    TRUE,
  110.                 LAGR_Spread,    TRUE,
  111.             TAG_DONE);
  112.             {
  113.                 LT_New(Handle,
  114.                     LA_Type,    BUTTON_KIND,
  115.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  116.                     LA_ID,        GAD_USE,
  117.                     LABT_ReturnKey,    TRUE,
  118.                     LABT_ExtraFat,    TRUE,
  119.                 TAG_DONE);
  120.  
  121.                 LT_New(Handle,
  122.                     LA_Type,    BUTTON_KIND,
  123.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  124.                     LA_ID,        GAD_CANCEL,
  125.                     LABT_EscKey,    TRUE,
  126.                     LABT_ExtraFat,    TRUE,
  127.                 TAG_DONE);
  128.  
  129.                 LT_EndGroup(Handle);
  130.             }
  131.  
  132.             LT_EndGroup(Handle);
  133.         }
  134.  
  135.         if(Window = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_CODE_TRANSLATION_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  136.             LAWN_HelpHook,        &GuideHook,
  137.             WA_DepthGadget,        TRUE,
  138.             WA_CloseGadget,        TRUE,
  139.             WA_DragBar,        TRUE,
  140.             WA_RMBTrap,        TRUE,
  141.             WA_Activate,        TRUE,
  142.         TAG_DONE))
  143.         {
  144.             struct IntuiMessage    *Message;
  145.             BOOLEAN             Done = FALSE;
  146.             ULONG             MsgClass,
  147.                          MsgQualifier;
  148.             UWORD             MsgCode;
  149.             struct Gadget        *MsgGadget;
  150.  
  151.             LT_ShowWindow(Handle,TRUE);
  152.  
  153.             GuideContext(CONTEXT_TRANSLATION);
  154.  
  155.             PushWindow(Window);
  156.  
  157.             do
  158.             {
  159.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  160.                     break;
  161.  
  162.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  163.                 {
  164.                     MsgClass    = Message -> Class;
  165.                     MsgQualifier    = Message -> Qualifier;
  166.                     MsgCode        = Message -> Code;
  167.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  168.  
  169.                     GT_ReplyIMsg(Message);
  170.  
  171.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  172.  
  173.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  174.                         Done = TRUE;
  175.  
  176.                     if(MsgClass == IDCMP_GADGETUP)
  177.                     {
  178.                         switch(MsgGadget -> GadgetID)
  179.                         {
  180.                             case GAD_USE:
  181.  
  182.                                 if(SendBuffer[0])
  183.                                 {
  184.                                     struct TranslationEntry *Entry = AllocTranslationEntry(SendBuffer);
  185.  
  186.                                     if(Entry)
  187.                                     {
  188.                                         if(SendTable[CharCode])
  189.                                             FreeTranslationEntry(SendTable[CharCode]);
  190.  
  191.                                         SendTable[CharCode] = Entry;
  192.  
  193.                                         Result = TRUE;
  194.                                     }
  195.                                 }
  196.                                 else
  197.                                 {
  198.                                     if(SendTable[CharCode])
  199.                                         FreeTranslationEntry(SendTable[CharCode]);
  200.  
  201.                                     SendTable[CharCode] = NULL;
  202.  
  203.                                     Result = TRUE;
  204.                                 }
  205.  
  206.                                 if(ReceiveBuffer[0])
  207.                                 {
  208.                                     struct TranslationEntry *Entry = AllocTranslationEntry(ReceiveBuffer);
  209.  
  210.                                     if(Entry)
  211.                                     {
  212.                                         if(ReceiveTable[CharCode])
  213.                                             FreeTranslationEntry(ReceiveTable[CharCode]);
  214.  
  215.                                         ReceiveTable[CharCode] = Entry;
  216.  
  217.                                         Result = TRUE;
  218.                                     }
  219.                                 }
  220.                                 else
  221.                                 {
  222.                                     if(ReceiveTable[CharCode])
  223.                                         FreeTranslationEntry(ReceiveTable[CharCode]);
  224.  
  225.                                     ReceiveTable[CharCode] = NULL;
  226.  
  227.                                     Result = TRUE;
  228.                                 }
  229.  
  230.                                 Done = TRUE;
  231.                                 break;
  232.  
  233.                             case GAD_CANCEL:
  234.  
  235.                                 Done = TRUE;
  236.                                 break;
  237.                         }
  238.                     }
  239.                 }
  240.             }
  241.             while(!Done);
  242.  
  243.             PopWindow();
  244.         }
  245.  
  246.         LT_DeleteHandle(Handle);
  247.     }
  248.  
  249.     return(Result);
  250. }
  251.  
  252. BYTE
  253. TranslationPanel()
  254. {
  255.     struct LayoutHandle    *Handle;
  256.     BYTE             MadeChanges    = FALSE,
  257.                  Created    = FALSE;
  258.  
  259.     if(!SendTable)
  260.     {
  261.         if(!(SendTable = AllocTranslationTable()))
  262.         {
  263.             DisplayBeep(Window -> WScreen);
  264.  
  265.             return(FALSE);
  266.         }
  267.  
  268.         if(!(ReceiveTable = AllocTranslationTable()))
  269.         {
  270.             DisplayBeep(Window -> WScreen);
  271.  
  272.             FreeTranslationTable(SendTable);
  273.  
  274.             SendTable = NULL;
  275.  
  276.             return(FALSE);
  277.         }
  278.  
  279.         if(!FillTranslationTable(SendTable))
  280.         {
  281.             DisplayBeep(Window -> WScreen);
  282.  
  283.             FreeTranslationTable(SendTable);
  284.  
  285.             SendTable = NULL;
  286.  
  287.             FreeTranslationTable(ReceiveTable);
  288.  
  289.             ReceiveTable = NULL;
  290.  
  291.             return(FALSE);
  292.         }
  293.  
  294.         if(!FillTranslationTable(ReceiveTable))
  295.         {
  296.             DisplayBeep(Window -> WScreen);
  297.  
  298.             FreeTranslationTable(SendTable);
  299.  
  300.             SendTable = NULL;
  301.  
  302.             FreeTranslationTable(ReceiveTable);
  303.  
  304.             ReceiveTable = NULL;
  305.  
  306.             return(FALSE);
  307.         }
  308.  
  309.         Created = TRUE;
  310.     }
  311.  
  312.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  313.         LH_LocaleHook,    &LocaleHook,
  314.     TAG_DONE))
  315.     {
  316.         struct Window    *Window;
  317.         LONG         i,Width,Max = 0;
  318.  
  319.         for(i = 0 ; i < 256 ; i++)
  320.         {
  321.             if((Width = LT_LabelChars(Handle,CharCodes[i])) > Max)
  322.                 Max = Width;
  323.         }
  324.  
  325.         LT_New(Handle,
  326.             LA_Type,    VERTICAL_KIND,
  327.         TAG_DONE);
  328.         {
  329.             LT_New(Handle,
  330.                 LA_Type,    VERTICAL_KIND,
  331.                 LA_LabelID,    MSG_V36_1774,
  332.             TAG_DONE);
  333.             {
  334.                 LT_New(Handle,
  335.                     LA_Type,    VERTICAL_KIND,
  336.                 TAG_DONE);
  337.                 {
  338.                     STATIC STRPTR Halfs[] =
  339.                     {
  340.                         "NUL-DEL",
  341.                         "128-\"ÿ\"",
  342.                         NULL
  343.                     };
  344.  
  345.                     LT_New(Handle,
  346.                         LA_Type,    CYCLE_KIND,
  347.                         LA_LabelID,    MSG_TRANSLATIONPANEL_CHARACTER_PAGE_GAD,
  348.                         LA_ID,        GAD_PAGE,
  349.                         GTCY_Labels,    Halfs,
  350.                         LA_NoKey,    TRUE,
  351.                     TAG_DONE);
  352.  
  353.                     LT_New(Handle,
  354.                         LA_Type,    XBAR_KIND,
  355.                     TAG_DONE);
  356.  
  357.                     LT_EndGroup(Handle);
  358.                 }
  359.  
  360.                 LT_New(Handle,
  361.                     LA_Type,    VERTICAL_KIND,
  362.                 TAG_DONE);
  363.                 {
  364.                     WORD i,j;
  365.  
  366.                     for(i = 0 ; i < 16 ; i++)
  367.                     {
  368.                         LT_New(Handle,
  369.                             LA_Type,    HORIZONTAL_KIND,
  370.                             LA_SameSize,    TRUE,
  371.                         TAG_DONE);
  372.                         {
  373.                             for(j = 0 ; j < 8 ; j++)
  374.                             {
  375.                                 LT_New(Handle,
  376.                                     LA_Type,    BUTTON_KIND,
  377.                                     LA_LabelText,    CharCodes[i * 8 + j],
  378.                                     LA_ID,        GAD_CHAR + i * 8 + j,
  379.                                     LA_Chars,    Max,
  380.                                     LA_NoKey,    TRUE,
  381.                                 TAG_DONE);
  382.                             }
  383.  
  384.                             LT_EndGroup(Handle);
  385.                         }
  386.                     }
  387.  
  388.                     LT_EndGroup(Handle);
  389.                 }
  390.  
  391.                 LT_EndGroup(Handle);
  392.             }
  393.  
  394.             LT_New(Handle,
  395.                 LA_Type,VERTICAL_KIND,
  396.             TAG_DONE);
  397.             {
  398.                 LT_New(Handle,
  399.                     LA_Type,    XBAR_KIND,
  400.                     LAXB_FullSize,    TRUE,
  401.                 TAG_DONE);
  402.  
  403.                 LT_EndGroup(Handle);
  404.             }
  405.  
  406.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  407.                 LAGR_Spread,    TRUE,
  408.             TAG_DONE);
  409.             {
  410.                 LT_New(Handle,
  411.                     LA_Type,    BUTTON_KIND,
  412.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  413.                     LA_ID,        GAD_USE,
  414.                     LA_NoKey,    TRUE,
  415.                     LABT_ExtraFat,    TRUE,
  416.                 TAG_DONE);
  417.  
  418.                 LT_New(Handle,
  419.                     LA_Type,    BUTTON_KIND,
  420.                     LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  421.                     LA_ID,        GAD_DEFAULT,
  422.                     LA_NoKey,    TRUE,
  423.                     LABT_ExtraFat,    TRUE,
  424.                 TAG_DONE);
  425.  
  426.                 LT_New(Handle,
  427.                     LA_Type,    BUTTON_KIND,
  428.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  429.                     LA_ID,        GAD_LOAD,
  430.                     LA_NoKey,    TRUE,
  431.                     LABT_ExtraFat,    TRUE,
  432.                 TAG_DONE);
  433.  
  434.                 LT_New(Handle,
  435.                     LA_Type,    BUTTON_KIND,
  436.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  437.                     LA_ID,        GAD_SAVE,
  438.                     LA_NoKey,    TRUE,
  439.                     LABT_ExtraFat,    TRUE,
  440.                 TAG_DONE);
  441.  
  442.                 LT_New(Handle,
  443.                     LA_Type,    BUTTON_KIND,
  444.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  445.                     LA_ID,        GAD_CANCEL,
  446.                     LA_NoKey,    TRUE,
  447.                     LABT_ExtraFat,    TRUE,
  448.                     LABT_EscKey,    TRUE,
  449.                 TAG_DONE);
  450.  
  451.                 LT_EndGroup(Handle);
  452.             }
  453.  
  454.             LT_EndGroup(Handle);
  455.         }
  456.  
  457.         if(Window = LT_Layout(Handle,LocaleString(MSG_TRANSLATIONPANEL_CHARACTER_TABLE_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  458.             LAWN_HelpHook,        &GuideHook,
  459.             WA_DepthGadget,        TRUE,
  460.             WA_CloseGadget,        TRUE,
  461.             WA_DragBar,        TRUE,
  462.             WA_RMBTrap,        TRUE,
  463.             WA_Activate,        TRUE,
  464.         TAG_DONE))
  465.         {
  466.             struct IntuiMessage    *Message;
  467.             BOOLEAN             Done = FALSE;
  468.             ULONG             MsgClass,
  469.                          MsgQualifier;
  470.             UWORD             MsgCode;
  471.             struct Gadget        *MsgGadget;
  472.             LONG             CharBase = 0,i;
  473.             UBYTE             DummyBuffer[256],
  474.                         *DummyChar;
  475.             struct FileRequester    *FileRequest;
  476.             WORD             KeyCode;
  477.  
  478.             PushWindow(Window);
  479.  
  480.             do
  481.             {
  482.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  483.                     break;
  484.  
  485.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  486.                 {
  487.                     MsgClass    = Message -> Class;
  488.                     MsgQualifier    = Message -> Qualifier;
  489.                     MsgCode        = Message -> Code;
  490.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  491.  
  492.                     if(MsgClass == IDCMP_RAWKEY)
  493.                         KeyCode = LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget);
  494.                     else
  495.                         KeyCode = -1;
  496.  
  497.                     GT_ReplyIMsg(Message);
  498.  
  499.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  500.  
  501.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  502.                         Done = TRUE;
  503.  
  504.                     if(KeyCode != -1 && KeyCode != '\033')
  505.                     {
  506.                         if(KeyCode >= CharBase && KeyCode < CharBase + 128)
  507.                             LT_PressButton(Handle,GAD_CHAR + KeyCode - CharBase);
  508.  
  509.                         LT_LockWindow(Window);
  510.  
  511.                         MadeChanges |= CodePanel(Window,KeyCode);
  512.  
  513.                         LT_UnlockWindow(Window);
  514.  
  515.                         LT_ShowWindow(Handle,TRUE);
  516.                     }
  517.  
  518.                     if(MsgClass == IDCMP_GADGETUP)
  519.                     {
  520.                         switch(MsgGadget -> GadgetID)
  521.                         {
  522.                             case GAD_PAGE:
  523.  
  524.                                 LT_LockWindow(Window);
  525.  
  526.                                 if(MsgCode)
  527.                                 {
  528.                                     for(i = 0 ; i < 128 ; i++)
  529.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[128 + i],TAG_DONE);
  530.  
  531.                                     CharBase = 128;
  532.                                 }
  533.                                 else
  534.                                 {
  535.                                     for(i = 0 ; i < 128 ; i++)
  536.                                         LT_SetAttributes(Handle,GAD_CHAR + i,LA_LabelText,CharCodes[0 + i],TAG_DONE);
  537.  
  538.                                     CharBase = 0;
  539.                                 }
  540.  
  541.                                 if(!LT_Rebuild(Handle,NULL,0,0,FALSE))
  542.                                 {
  543.                                     LT_DeleteHandle(Handle);
  544.  
  545.                                     Handle = NULL;
  546.  
  547.                                     Done = TRUE;
  548.                                 }
  549.                                 else
  550.                                     LT_UnlockWindow(Window);
  551.  
  552.                                 break;
  553.  
  554.                             case GAD_DEFAULT:
  555.  
  556.                                 if(SendTable)
  557.                                 {
  558.                                     struct TranslationEntry **Table;
  559.  
  560.                                     if(Table = AllocTranslationTable())
  561.                                     {
  562.                                         if(FillTranslationTable(Table))
  563.                                         {
  564.                                             FreeTranslationTable(SendTable);
  565.  
  566.                                             SendTable = Table;
  567.                                         }
  568.                                     }
  569.                                 }
  570.  
  571.                                 if(ReceiveTable)
  572.                                 {
  573.                                     struct TranslationEntry **Table;
  574.  
  575.                                     if(Table = AllocTranslationTable())
  576.                                     {
  577.                                         if(FillTranslationTable(Table))
  578.                                         {
  579.                                             FreeTranslationTable(ReceiveTable);
  580.  
  581.                                             ReceiveTable = Table;
  582.                                         }
  583.                                     }
  584.                                 }
  585.  
  586.                                 break;
  587.  
  588.                             case GAD_USE:
  589.  
  590.                                 Done = TRUE;
  591.                                 break;
  592.  
  593.                             case GAD_CANCEL:
  594.  
  595.                                 Done = TRUE;
  596.                                 break;
  597.  
  598.                             case GAD_LOAD:
  599.  
  600.                                 strcpy(DummyBuffer,LastTranslation);
  601.  
  602.                                 DummyChar = PathPart(DummyBuffer);
  603.  
  604.                                 *DummyChar = 0;
  605.  
  606.                                 LT_LockWindow(Window);
  607.  
  608.                                 if(FileRequest = GetFile(Window,LocaleString(MSG_TRANSLATIONPANEL_LOAD_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  609.                                 {
  610.                                     struct TranslationEntry **Send,**Receive = NULL;
  611.                                     BYTE Success = FALSE;
  612.  
  613.                                     if(Send = AllocTranslationTable())
  614.                                     {
  615.                                         if(Receive = AllocTranslationTable())
  616.                                             Success = LoadTranslationTables(DummyBuffer,Send,Receive);
  617.                                     }
  618.  
  619.                                     if(!Success)
  620.                                     {
  621.                                         ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  622.  
  623.                                         if(Send)
  624.                                             FreeTranslationTable(Send);
  625.  
  626.                                         if(Receive)
  627.                                             FreeTranslationTable(Receive);
  628.                                     }
  629.                                     else
  630.                                     {
  631.                                         strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  632.  
  633.                                         strcpy(LastTranslation,DummyBuffer);
  634.  
  635.                                         MadeChanges    = FALSE;
  636.                                         Created        = FALSE;
  637.  
  638.                                         FreeTranslationTable(SendTable);
  639.                                         FreeTranslationTable(ReceiveTable);
  640.  
  641.                                         SendTable    = Send;
  642.                                         ReceiveTable    = Receive;
  643.                                     }
  644.  
  645.                                     FreeAslRequest(FileRequest);
  646.                                 }
  647.  
  648.                                 LT_UnlockWindow(Window);
  649.                                 break;
  650.  
  651.                             case GAD_SAVE:
  652.  
  653.                                 strcpy(DummyBuffer,LastTranslation);
  654.  
  655.                                 DummyChar = PathPart(DummyBuffer);
  656.  
  657.                                 *DummyChar = 0;
  658.  
  659.                                 LT_LockWindow(Window);
  660.  
  661.                                 if(FileRequest = GetFile(Window,LocaleString(MSG_TRANSLATIONPANEL_SAVE_TRANSLATION_TABLES_TXT),DummyBuffer,FilePart(LastTranslation),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  662.                                 {
  663.                                     if(!SaveTranslationTables(DummyBuffer,SendTable,ReceiveTable))
  664.                                         ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  665.                                     else
  666.                                     {
  667.                                         strcpy(LastTranslation,DummyBuffer);
  668.  
  669.                                         MadeChanges = FALSE;
  670.  
  671.                                         Created = FALSE;
  672.                                     }
  673.  
  674.                                     FreeAslRequest(FileRequest);
  675.                                 }
  676.  
  677.                                 LT_UnlockWindow(Window);
  678.                                 break;
  679.  
  680.                             default:
  681.  
  682.                                 if(MsgGadget -> GadgetID >= GAD_CHAR && MsgGadget -> GadgetID < GAD_CHAR + 128)
  683.                                 {
  684.                                     LT_LockWindow(Window);
  685.  
  686.                                     MadeChanges |= CodePanel(Window,CharBase + MsgGadget -> GadgetID - GAD_CHAR);
  687.  
  688.                                     LT_UnlockWindow(Window);
  689.  
  690.                                     LT_ShowWindow(Handle,TRUE);
  691.                                 }
  692.  
  693.                                 break;
  694.                         }
  695.                     }
  696.                 }
  697.             }
  698.             while(!Done);
  699.  
  700.             PopWindow();
  701.         }
  702.  
  703.         LT_DeleteHandle(Handle);
  704.     }
  705.  
  706.     if(!MadeChanges && Created || (IsStandardTable(SendTable) && IsStandardTable(ReceiveTable)))
  707.     {
  708.         FreeTranslationTable(SendTable);
  709.  
  710.         SendTable = NULL;
  711.  
  712.         FreeTranslationTable(ReceiveTable);
  713.  
  714.         ReceiveTable = NULL;
  715.     }
  716.  
  717.     return(MadeChanges);
  718. }
  719.